package com.dayaokeji.server_api.api;

import com.dayaokeji.server_api.Page;
import com.dayaokeji.server_api.ServerResponse;
import com.dayaokeji.server_api.domain.ForgetPassword;
import com.dayaokeji.server_api.domain.UpdateMobie;
import com.dayaokeji.server_api.domain.UpdateUserInfo;
import com.dayaokeji.server_api.domain.UserInfo;

import java.util.List;
import java.util.Map;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;

/**
 * Created by Gorden on 2017/9/28.
 * 用户接口
 */

public interface UserApi {

    /**
     * 用户登录
     * @param params
     * @return
     */
    @POST("course/user/login")
    Call<ServerResponse<UserInfo>> login(@Body Map<String,String> params);

    /**
     * 用户登出
     * @return
     */
    @GET("course/token/logout")
    Call<ServerResponse<Void>> logout();

    /**
     * 用户注册
     * @param params
     * @return
     */
    @POST("course/user/register")
    Call<ServerResponse<Void>> register(@Body Map<String,String> params);

    /**
     * 修改用户信息
     * @param userInfo
     * @return
     */
    @POST("course/user/update")
    Call<ServerResponse<Void>> update(@Body UpdateUserInfo userInfo);

    /**
     * 根据条件获取用户列表
     * @return
     */
    @GET("course/user/list")
    Call<ServerResponse<Page<UserInfo>>> list(
            @Query("universityId") long universityId,
            @Query("facultyId") long department,
            @Query("majorId") long personal,
            @Query("classId") long classId,
            @Query("start") int start,
            @Query("length") int length
    );

    /**
     * 根据条件获取用户列表
     * @return
     */
    @GET("course/user/list")
    Call<ServerResponse<Page<UserInfo>>> queryKeyword(
            @Query("name")String name,
            @Query("workNo")String workNo,
            @Query("start") int start,
            @Query("length") int length
    );

    /**
     * 绑定手机号码
     * @param params
     * @return
     */
    @POST("course/user/bindPhone")
    Call<ServerResponse<UserInfo>> bindPhone(@Body Map<String,String> params);

    /**
     * 上传文件
     * @param myfiles 文件
     * @param type 分类    1, 图片 2, PDF  3, EXCEL 4, WORD  9, 其他
     * @param description 资源描述
     * @param function 做什么用的 1.广告 2.会议或课程资源
     * @return
     */
    @Multipart
    @POST("course/resource/upload")
    Call<ServerResponse<List<Integer>>> uploadAvatar(
            @Part MultipartBody.Part myfiles,
            @Part("type") RequestBody type,
            @Part("description") RequestBody description,
            @Part("function") RequestBody function
    );

    /**
     * 忘记密码
     * @param forgetPassword
     * @return
     */
    @POST("course/user/modify")
    Call<ServerResponse<Void>> forgetPassword(@Body ForgetPassword forgetPassword);

    /**
     * 获取个人信息
     * @param uid
     * @return
     */
    @GET("course/user/detail")
    Call<ServerResponse<UserInfo>> userDetail(@Query("id") long uid);

    /**
     * 根据workNo查询个人信息
     * @param id
     * @param start
     * @param length
     * @return
     */
    @GET("course/user/list")
    Call<ServerResponse<Page<UserInfo>>> userInfoById(@Query("id") String id, @Query("start") int start, @Query("length") int length);

    /**
     * 请假
     * @param params
     * @return
     */
    @POST("course/course/leave")
    Call<ServerResponse<Integer>> leave(@Body Map<String,Object> params);

    /**
     * 更新手机号码
     * @param updateMobie
     * @return
     */
    @POST("course/user/updatePhone")
    Call<ServerResponse<UserInfo>> updatePhone(@Body UpdateMobie updateMobie);

    /**
     * 同步学生部门信息
     * @param params
     * @return
     */
    @POST("course/sync/student")
    Call<ServerResponse<Void>> syncStudentInfo(@Body Map<String,Object> params);
}
